Thread 문자열 전송 기반의 채팅 서버/클라이언트 :: 자바예제모음[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

자바예제모음
[1]
등록일:2008-04-15 17:02:01 (0%)
작성자:
제목:Thread 문자열 전송 기반의 채팅 서버/클라이언트
▩  Thread  문자열  전송  기반의  채팅  서버/클라이언트

1.  ChatServer.java
package  chatting;

import  java.io.BufferedReader;
import  java.io.BufferedWriter;
import  java.io.IOException;
import  java.io.InputStreamReader;
import  java.io.OutputStreamWriter;
import  java.net.ServerSocket;
import  java.net.Socket;

public  class  ChatServer  {
        BufferedWriter  writer=null;
        Socket  socket=null;
        ServerSocket  server  =  null;

        public  void  serverStart(){
                System.out.println("접속자를  기다리는  중입니다.");
                try  {
                        server  =  new  ServerSocket(2006);
                        socket  =  server.accept();
                        writer  =  new  BufferedWriter(new  OutputStreamWriter(socket.getOutputStream()));
                      
                        System.out.println("클라이언트  IP:  "  +  socket.getInetAddress().getHostAddress()  +  "  이름:  "  +    socket.getInetAddress().getHostName()  +  "  연결되었습니다.");
                        //Client와  통신할  스레드  구현  클래스
                        ChatServerHandler  handler  =  new  ChatServerHandler(socket);
                        handler.start();
                      
                        BufferedReader  in  =  new  BufferedReader(new  InputStreamReader(System.in));                    
                        String  s="";
                      
                        while(true)  {
                                try  {
                                    System.out.print("☞  ");
                                    s  =  in.readLine();  //키보드로부터  입력
                                    if(s.equals("999"))  break;  //종료코드
                                    writer.write(s);
                                    writer.newLine();    //줄바뀜  기호가  있어야  BufferedReader의  readLine()이  인식함
                                    writer.write("---------------------------------------------------------------");
                                    writer.newLine();
                                    writer.flush();
                                }  catch  (Exception  e)  {
                                    System.out.println("Error:  "  +  e.toString());
                                }      
                                //System.out.println("보낸  글:"  +  s);//입력받은  내용  출력
                        }
                }  catch(IOException  ioe)  {
                        System.err.println("Exception  generated...");
                }  finally  {
                        try  {
                                server.close();
                        }  catch(IOException  ignored)  {}
                }
              
        }

        public  static  void  main(String[]  args)  {
                ChatServer  cs  =  new  ChatServer();
                cs.serverStart();
        }
}

class  ChatServerHandler  extends  Thread{
        protected  Socket  socket;
        String  line;      //서버로부터  읽어온  문자열  저장      

        public  ChatServerHandler(Socket  socket)  {
                this.socket  =  socket;  
        }

        public  void  run()  {
                try  {
                        BufferedReader  reader  =  new  BufferedReader(new  InputStreamReader(socket.getInputStream()));
                        while(true){
                                line  =  reader.readLine();
                                System.out.println("받은글:  "  +  line);
                                System.out.print("☞  ");
                        }

                }  catch(IOException  ignored)  {
                }  finally  {
                        try  {
                                socket.close();
                        }  catch(IOException  ignored)  {}
                }
        }

}

  

  


2.  ChatClient.java
package  chatting;

import  java.io.BufferedReader;
import  java.io.BufferedWriter;
import  java.io.IOException;
import  java.io.InputStreamReader;
import  java.io.OutputStreamWriter;
import  java.net.Socket;

public  class  ChatClient  {
        BufferedWriter  writer=null;
      
        Socket  socket  =  null;
        String  line;      //서버로부터  읽어온  문자열  저장
        int  cnt=0;
      
        public  void  clientStart(String  ip){
                System.out.println("클라이언트  프로그램  작동.....");
                try  {
                        socket  =  new  Socket(ip,  2006);
                        writer  =  new  BufferedWriter(new  OutputStreamWriter(socket.getOutputStream()));
                      
                        //Server와  통신할  스레드  구현  클래스
                        ChatClientHandler  handler  =  new  ChatClientHandler(socket);
                        handler.start();
                      
                        BufferedReader  in  =  new  BufferedReader(new  InputStreamReader(System.in));                    
                        String  s="";
                      
                        while(true)  {
                                try  {
                                    System.out.print("☞  ");      
                                    s  =  in.readLine();  //키보드로부터  입력
                                    if(s.equals("999"))  break;  //종료코드
                                    writer.write(s);
                                    writer.newLine();    //줄바뀜  기호가  있어야  BufferedReader의  readLine()이  인식함
                                    writer.write("---------------------------------------------------------------");
                                    writer.newLine();
                                  
                                    writer.flush();                                  
                                }  catch  (Exception  e)  {
                                    System.out.println("Error:  "  +  e.toString());
                                }      
                                //System.out.println("보낸  글:"  +  s);//입력받은  내용  출력
                        }
                }  catch(IOException  ioe)  {
                        System.err.println("Exception  generated...");
                }  finally  {
                        try  {
                                socket.close();
                        }  catch(IOException  ignored)  {}
                }
            
        }

        public  static  void  main(String[]  args)  {
                ChatClient  cc  =  new  ChatClient();
                cc.clientStart(args[0]);
        }
}

class  ChatClientHandler  extends  Thread{
        protected  Socket  socket;
        String  line;      //서버로부터  읽어온  문자열  저장      

        public  ChatClientHandler(Socket  socket)  {
                this.socket  =  socket;  
        }

        public  void  run()  {
                try  {
                        BufferedReader  reader  =  new  BufferedReader(new  InputStreamReader(socket.getInputStream()));
                        while(true){
                                line  =  reader.readLine();
                                System.out.println("받은글:  "  +  line);
                                System.out.print("☞  ");
                        }
                }  catch(IOException  ignored)  {
                }  finally  {
                        try  {
                                socket.close();
                        }  catch(IOException  ignored)  {}
                }
        }

}  

>>>>>  실행:
c:
cd  C:\java1000\eclipse\workspace\20060401\classes
start  java  chatting.ChatServer
start  java  chatting.ChatClient  172.16.1.1

출처  :  http://elog.comrg.net/java/1002
[본문링크] Thread 문자열 전송 기반의 채팅 서버/클라이언트
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=7413
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.